const ws = require('nodejs-websocket');
const TYPE_ENTER = 0;
const TYPE_LEAVE = 1;
const TYPE_MSG = 2;


//记录连接上来的总用户数量
let count = 0;

//每个连接到服务器的用户，都会有一个conn
const server = ws.createServer(conn => {
    console.log('新的连接');
    count++;
    conn.userName = `用户${count}`;
    //告诉所有用户，有人加入了聊天室
    broadcast({
        type : TYPE_ENTER,
        msg : `${conn.userName}进入了聊天室`,
        time : new Date().toLocaleTimeString()
    });

    //接收到了浏览器的数据
    conn.on('text', data => {
        //当我们接收到某个用户的信息时，告诉所有用户，发送的信息内容是什么
        broadcast({
            type : TYPE_MSG,
            msg : conn.userName + ":" + data,
            time : new Date().toLocaleTimeString()
        });
    });

    //关闭连接的时候触发
    conn.on('close', data => {
        console.log('关闭连接');
        count--;
        //告诉所有用户有人离开了聊天室
        broadcast(
            {
                type : TYPE_LEAVE,
                msg : `${conn.userName}离开了聊天室`,
                time : new Date().toLocaleTimeString()
            }
        );
    });

    //发生异常时触发
    conn.on('error', data => {
        console.log('发生异常');
    })

})

//广播，给所有的用户发消息,msg传的是字符串
function broadcast(msg) {
    //server.connections表示所有用户
    server.connections.forEach(item => {
        // 必须转换成json字符串
        item.send(JSON.stringify(msg));
    })
}

server.listen('3000', () => {
    console.log('监听端口3000');
})
